/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package modelo;


import java.util.List;
import org.springframework.orm.jpa.support.JpaDaoSupport;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author odeen
 */

@Transactional(propagation = Propagation.REQUIRED,readOnly=true)
public class ProyectoJPADAOImpl extends JpaDaoSupport implements ProyectoDAO {

    @Override
    @Transactional(readOnly=false)
    public void guardarLibro(Libro Libro) {
        this.getJpaTemplate().persist(Libro);
        this.getJpaTemplate().flush();
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public void actualizarLibro(Libro Libro) {
        Libro a = this.getJpaTemplate().merge(Libro);
        this.getJpaTemplate().flush();
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public void borrarLibro(Libro Libro) {
        Libro a = this.getJpaTemplate().merge(Libro);
        this.getJpaTemplate().remove(a);
    }

    @Override
    public Libro buscarLibroPorId(int id) {
        return (Libro) this.getJpaTemplate().find(Libro.class, id);
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRED,rollbackFor=java.lang.RuntimeException.class)
    public void agregarTresLibros(boolean error) {
        for (int i = 1; i < 4; i++) {
            Libro l = new Libro();
            l.setIsbn("ISBN " + i);
            l.setTitulo("Titulo: " + i);
            l.setNumeroPaginas(i);
            guardarLibro(l);
        }
        if (error) {
            throw new RuntimeException("Error forzado");
        }
    }

    @Override
    @Transactional(propagation = Propagation.REQUIRED)
    public void borrarTresLibros() {
        List<Libro> libros = buscarLibros();
        for (Libro libro : libros) {
            borrarLibro(libro);
        }
    }

    @Override
    public List<Libro> buscarLibros() {
        return  this.getJpaTemplate().find("select reg from Libro reg");
    }
}
